#include <iostream>
#include <functional>
#include <vector>
using namespace std;

// 全局变量：存储函数对象的vector，每个元素是接收const string&参数、返回void的函数
vector<function<void(const string &)>> vec;

void test()
{
    int num = 100;                 // 局部变量num，作用域为test()函数内
    string name("wangdao");        // 局部变量name，作用域为test()函数内
    
    // 向vec中添加一个Lambda表达式（引用捕获num和name）
    vec.push_back([num, name](const string &value){
                    cout << "num = " << num << endl;   // 使用捕获的num引用
                    cout << "name = " << name << endl; // 使用捕获的name引用
                    cout << "value = " << value << endl; // 使用参数value
                    });
    
    // 循环代码
    // for(auto func : vec)
    // {
    //     func("wuhan");
    // }
}

void test2()
{
    // 遍历vec中的函数对象并调用
    for(auto func : vec)
    {
        func("wuhanDaXue");  // 危险！此时test()中的num和name已销毁，引用捕获失效
    }
}

int main(){
    test();
    test2();

    return 0;
}